﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Xml;
using System.Windows.Forms;
using System.Linq.Expressions;
using System.Xml.Linq;
using System.Xml.XPath;
using System.IO;
using System;

namespace My_Windows_Media_Player
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
        }
            
        private void browse_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            axWindowsMediaPlayer1.URL = openFileDialog1.FileName;
        }

        private void add_file_Click(object sender, EventArgs e)
        {
            XDocument xmlDoc;

            openFileDialog1.ShowDialog();
            if (!File.Exists("currentplaylist.xml"))
            {
                // creation du fichier currentPlaylist.xml
                xmlDoc = new XDocument();
                xmlDoc.Add(new XElement("Fichiers"));
                xmlDoc.Save("currentPlaylist.xml");
            }
            // ajout du fichier dans le xml
            xmlDoc = XDocument.Load("currentPlaylist.xml");
            xmlDoc.Element("Fichiers").Add(new XElement("Fichier", new XElement("Type", "Musique"), new XElement("Path", openFileDialog1.FileName), new XElement("Artiste", ""), new XElement("Titre", ""), new XElement("Durée", "")));
            xmlDoc.Save("currentPlaylist.xml");
            read_xml_and_fill_list("currentPlaylist.xml");
        }

        private void add_dir_Click(object sender, EventArgs e)
        {
            XDocument xmlDoc;
            string[] files;
            int filecount;
            FolderBrowserDialog dirbrowser = new FolderBrowserDialog();

               if (!File.Exists("currentplaylist.xml"))
                 {
                    // creation du fichier currentPlaylist.xml
                   xmlDoc = new XDocument();
                   xmlDoc.Add(new XElement("Fichiers"));
                   xmlDoc.Save("currentPlaylist.xml");
                 }
            // ajout du contenu du repertoire dans le fichier xml
               xmlDoc = XDocument.Load("currentPlaylist.xml");
               dirbrowser.ShowDialog();
               files = Directory.GetFileSystemEntries(dirbrowser.SelectedPath);
               filecount = files.GetUpperBound(0) + 1;
               for (int i = 0; i < filecount; i++)
               {
                   xmlDoc.Element("Fichiers").Add(new XElement("Fichier", new XElement("Type", "Musique"), new XElement("Path", files[i]), new XElement("Artiste", ""), new XElement("Titre", ""), new XElement("Durée", "")));
                   xmlDoc.Save("currentPlaylist.xml");
                   read_xml_and_fill_list("currentPlaylist.xml");
               }
        }

        private void save_play_Click(object sender, EventArgs e)
        {

        }


        private void read_xml_and_fill_list(String liste)
        {
            int i = 0;
            if (liste == "currentPlaylist.xml")
            {
                listBox1.Items.Clear();
            }
            if (liste == "currentmedia.xml")
            {
                listBox2.Items.Clear();
            }
           
            XPathDocument docxml = new XPathDocument(liste);
            XPathNavigator lir = docxml.CreateNavigator();
            XPathNodeIterator iterateur = lir.Select("Musiques/Musique");
            while (iterateur.MoveNext())
            {
                if (liste == "currentPlaylist.xml")
                {
                    listBox1.Items.Insert(i, iterateur.Current.SelectSingleNode("Path").Value);
                }
                if(liste == "currentmedia.xml")
                {
                    listBox2.Items.Insert(i, iterateur.Current.SelectSingleNode("Path").Value);
                }
                i++;
            }
        }

        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            
            axWindowsMediaPlayer1.URL = listBox1.SelectedItem.ToString();
        }

        private void listBox2_DoubleClick(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.URL = listBox2.SelectedItem.ToString();
        }

        private void add_file_media_Click(object sender, System.EventArgs e)
        {
            openFileDialog1.ShowDialog();
            // -- Check que le fichier existe bien, sinon le creer.
            if (File.Exists("currentmedia.xml"))
            {
                // -- Ajout du fichier selectionne dans le XML.
                XDocument xmlDoc = XDocument.Load("currentmedia.xml");
                xmlDoc.Element("Musiques").Add(new XElement("Musique", new XElement("Path", openFileDialog1.FileName), new XElement("Artiste", ""), new XElement("Titre", "")));
                xmlDoc.Save("currentmedia.xml");
            }
            else
            {
                // -- Ajout du fichier selectionne dans le XML nouvellement cree.
                XDocument xmlDoc = new XDocument();
                xmlDoc.Add(new XElement("Musiques", new XElement("Musique", new XElement("Path", openFileDialog1.FileName), new XElement("Artiste", ""), new XElement("Titre", ""))));
                xmlDoc.Save("currentmedia.xml");
            }
            read_xml_and_fill_list("currentmedia.xml");
        }

        private void add_dir_media_Click(object sender, System.EventArgs e)
        {
            XDocument xmlDoc = XDocument.Load("currentmedia.xml");
            FolderBrowserDialog dirbrowser = new FolderBrowserDialog();
            string[] files;
            int filecount;

            dirbrowser.ShowDialog();

            files = Directory.GetFileSystemEntries(dirbrowser.SelectedPath);
            filecount = files.GetUpperBound(0) + 1;
            for (int i = 0; i < filecount; i++)
            {
                xmlDoc.Element("Musiques").Add(new XElement("Musique", new XElement("Path", files[i]), new XElement("Artiste", ""), new XElement("Titre", "")));
                xmlDoc.Save("currentmedia.xml");
                read_xml_and_fill_list("currentmedia.xml");
            }
        }


        private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
            System.Collections.IEnumerator listContent = this.listBox1.Items.GetEnumerator();
            while (listContent.MoveNext())
            {
                // Ici, charger les fichiers 1 par un dans la lib ID3TAG, pour filtrer en fonction de 
                // albums, artistes, genre
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
        {

        }

    }
}
